package com.example.exercises._001_按规则输出字符串;

import com.alibaba.fastjson.JSON;

import java.util.ArrayList;

/**
 * 答案
 */
public class Answer {

    //文字内容
    private static final String content = "第一条 为了保护劳动者的合法权益，&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp调整劳动关系，建立和维护适应社会主义市场经济的劳动制度，促进经济发展和社会进步，根据宪法，制定本法。 \n" +
            "第二条 在中华人民共和国境内的企业、个体经济组织（以下统称用人单位）和与之形成劳动关系的劳动者，适用本法。 国家机关、事业组织、\n" +
            "社会团体和与之建立劳动合同关系的劳动者，依照本法执行。 第三条 劳动者享有平等就业和选择职业的权利、取得劳动报酬的权利、休息休假的权利、获得劳动安全卫生保护的权利、接受职业技能培训的权利、享受社会保险和福利的权利、提请劳动争议处理的权利以及法律规定的其他劳动权利。 劳动者应当完成劳动任务，提高职业技能，执行劳动安全卫生规程，遵守劳动纪律和职业道德。 第四条 用人单位应当依法建立和完善规章制度，保障劳动者享有劳动权利和履行劳动义务。 第五条 国家采取各种措施，促进劳动就业，发展职业教育，制定劳动标准，调节社会收入，完善社会保险，协调劳动关系，逐步提高劳动者的生活水平。 第六条 国家提倡劳动者参加社会义务劳动，开展劳动竞赛和合理化建议活动，鼓励和保护劳动者进行科学研究、技术革新和发明创造，表彰和奖励劳动模范和先进工作者。 第七条 劳动者有权依法参加和组织工会。 工会代表和维护劳动者的合法权益，依法独立自主地开展活动。 第八条 劳动者依照法律规定，通过职工大会、职工代表大会或者其他形式，参与民主管理或者就保护劳动者合法权益与用人单位进行平等协商。 第九条 国务院劳动行政部门主管全国劳动工作。 县级以上地方人民政府劳动行政部门主管本行政区域内的劳动工作。第十条 国家通过促进经济和社会发展，创造就业条件，扩大就业机会。 国家鼓励企业、事业组织、社会团体在法律、行政法规规定的范围内兴办产业或者拓展经营，增加就业。 &nbsp&nbsp&nbsp&nbsp&nbsp国家支持劳动者自愿组织起来就业和从事个体经营实现就业。 第十一条 地方各级人民政府应当采取措施，发展多种类型的职业介绍机构，提供就业服务。 第十二条 劳动者就业，不因民族、种族、性别、宗教信仰不同而受歧视。 第十三条 妇女享有与男子平等的就业权利。在录用职工时，除国家规定的不适合妇女的工种或者岗位外，不得以性别为由拒绝录用妇女或者提高对妇女的录用标准。 第十四条 残疾人、少数民族人员、退出现役的军人的就业，法律、法规有特别规定的，从其规定。 第十五条 禁止用人单位招用未满十六周岁的未成年人。 文艺、体育和特种工艺单位招用未满十六周岁的未成年人，必须遵守国家有关规定，并保障其接受义务教育的权利。第十六条 劳动合同是劳动者与用人单位确立劳动关系、明确双方权利和义务的协议。 建立劳动关系应当订立劳动合同。 第十七条 订立和变更劳动合同，应当遵循平等自愿、协商一致的原则，不得违反法律、行政法规的规定。 <a>劳动合同依法订立即具有法律约束力</a>，当事人必须履行劳动合同规定的义务。 第十八条 下列劳动合同无效： （一）违反法律、行政法规的劳动合同； （二）采取欺诈、威胁等手段订立的劳动合同。 无效的劳动合同，从订立的时候起，就没有法律约束力。确认劳动合同部分无效的，如果不影响其余部分的效力，其余部分仍然有效。 劳动合同的无效，由劳动争议仲裁委员会或者人民法院确认。 第十九条 劳动合同应当以书面形式订立，并具备以下条款： （一）劳动合同期限； （二）工作内容； （三）劳动保护和劳动条件； （四）劳动报酬； （五）劳动纪律； （六）劳动合同终止的条件； （七）违反劳动合同的责任。 劳动合同除前款规定的必备条款外，当事人可以协商约定其他内容。";

    public static void main(String[] args) {
        ArrayList<com.example.exercises._001_按规则输出字符串.Question.Position> position = getPosition(19);
        System.out.println(JSON.toJSONString(position));
    }

    private static ArrayList<com.example.exercises._001_按规则输出字符串.Question.Position> getPosition(int count) {
        ArrayList<com.example.exercises._001_按规则输出字符串.Question.Position> positions = new ArrayList<>();


        count += 1;
        ArrayList<String> countList = new ArrayList<>();
        for (int i = 1; i < count; i++) {
            String s = "第" + convert(i) + "条";
            countList.add(s);
        }
        for (int i = 0; i < countList.size(); i++) {
            String strNumber = countList.get(i);
            int start = content.indexOf(strNumber);
            int end;
            if ((i + 1) != countList.size()) {
                end = content.indexOf(countList.get(i + 1));
            } else {
                end = content.length();
            }

            com.example.exercises._001_按规则输出字符串.Question.Position position = new com.example.exercises._001_按规则输出字符串.Question.Position();
//            position.setStart(start);
//            position.setEnd(end);
//            position.setNumber(i);
            position.setStrNumber(strNumber);
            position.setContent(content.substring(start, end));
            positions.add(position);
        }
        return positions;
    }

    public static String convert(int number) {
        String[] single = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"};//汉字一到九
        String[] unit = {"", "十", "百", "千", "万", "亿"};//汉字单位
        StringBuilder sb = new StringBuilder();
        int[] unitInt = {100000000, 10000, 1000, 100, 10};
        int m = 0;
        int tmp = -1;
        for (int i : unitInt) {
            int n = number / i;
            number = number % i;
            if (sb.length() != 0 || n != 0) {
                if (n > single.length - 1) {
                    String cc = convert(n);
                    sb.append(cc);
                } else {
                    if (0 == tmp && 0 == n) {

                    } else {
                        sb.append(single[n]);
                    }

                    tmp = n;
                }
                if (n != 0) {
                    sb.append(unit[unit.length - 1 - m]);
                }

            }
            m++;

        }

        if (number != 0) {
            sb.append(single[number]);
        }

        String ret = sb.toString();
        if (ret.length() == 0) {
            return "零";
        }

        String last = String.valueOf(ret.charAt(ret.length() - 1));
        if ("零".equals(last)) {
            ret = ret.substring(0, ret.length() - 1);
        }
        ret = ret.replace("一十", "十");
        return ret;
    }

    static class Position {
        String content;

        public String getContent() {
            return content;
        }

        public void setContent(String content) {
            this.content = content;
        }

        String strNumber;

        public String getStrNumber() {
            return strNumber;
        }

        public void setStrNumber(String strNumber) {
            this.strNumber = strNumber;
        }
    }
}
